styleproperty: Make print_func take a GtkCssValue
authorBenjamin Otte <otte@redhat.com>
Mon, 26 Mar 2012 04:46:29 +0000 (06:46 +0200)
committerBenjamin Otte <otte@redhat.com>
Tue, 17 Apr 2012 06:59:11 +0000 (08:59 +0200)
Also, constify GtkCssValue getters, so we can pass a const GtkCssValue
to the print_func.

gtk/gtkcssstyleproperty.c
gtk/gtkcssstylepropertyimpl.c
gtk/gtkcssstylepropertyprivate.h
gtk/gtkcssvalue.c
gtk/gtkcssvalueprivate.h

index 95b8ba16691372b32b9788b7f42056a97411b8e3..e783aa02c2715f5d657e19c2e1d8f83819b4fd3a 100644 (file)
@@ -284,10 +284,10 @@ gtk_css_style_property_real_parse_value (GtkCssStyleProperty *property,
 
 static void
 gtk_css_style_property_real_print_value (GtkCssStyleProperty *property,
-                                         const GValue        *value,
+                                         const GtkCssValue   *value,
                                          GString             *string)
 {
-  _gtk_css_style_print_value (value, string);
+  _gtk_css_value_print (value, string);
 }
 
 static GtkCssValue *
@@ -540,10 +540,7 @@ _gtk_css_style_property_print_value (GtkCssStyleProperty    *property,
     }
   else
     {
-      GValue value = G_VALUE_INIT;
-      _gtk_css_value_init_gvalue (css_value, &value);
-      property->print_value (property, &value, string);
-      g_value_unset (&value);
+      property->print_value (property, css_value, string);
     }
 }
 
index acd103f65c4e7f23cb18cc319a7f86af021a8dca..a6a06db7ef69e645eb00ccc45157039a1d4a9aa9 100644 (file)
@@ -235,10 +235,10 @@ font_family_parse (GtkCssStyleProperty *property,
 
 static void
 font_family_value_print (GtkCssStyleProperty *property,
-                         const GValue        *value,
+                         const GtkCssValue   *value,
                          GString             *string)
 {
-  const char **names = g_value_get_boxed (value);
+  const char **names = _gtk_css_value_get_strv (value);
 
   if (names == NULL || *names == NULL)
     {
@@ -298,13 +298,13 @@ bindings_value_parse (GtkCssStyleProperty *property,
 
 static void
 bindings_value_print (GtkCssStyleProperty *property,
-                      const GValue        *value,
+                      const GtkCssValue   *value,
                       GString             *string)
 {
   GPtrArray *array;
   guint i;
 
-  array = g_value_get_boxed (value);
+  array = _gtk_css_value_get_boxed (value);
 
   for (i = 0; i < array->len; i++)
     {
@@ -348,12 +348,12 @@ border_corner_radius_value_parse (GtkCssStyleProperty *property,
 
 static void
 border_corner_radius_value_print (GtkCssStyleProperty *property,
-                                  const GValue        *value,
+                                  const GtkCssValue   *value,
                                   GString             *string)
 {
-  GtkCssBorderCornerRadius *corner;
+  const GtkCssBorderCornerRadius *corner;
 
-  corner = g_value_get_boxed (value);
+  corner = _gtk_css_value_get_border_corner_radius (value);
 
   _gtk_css_number_print (&corner->horizontal, string);
 
@@ -387,10 +387,10 @@ css_image_value_parse (GtkCssStyleProperty *property,
 
 static void
 css_image_value_print (GtkCssStyleProperty *property,
-                       const GValue        *value,
+                       const GtkCssValue   *value,
                        GString             *string)
 {
-  GtkCssImage *image = g_value_get_object (value);
+  GtkCssImage *image = _gtk_css_value_get_image (value);
 
   if (image)
     _gtk_css_image_print (image, string);
@@ -575,14 +575,14 @@ background_repeat_value_parse (GtkCssStyleProperty *property,
 
 static void
 background_repeat_value_print (GtkCssStyleProperty *property,
-                               const GValue        *value,
+                               const GtkCssValue   *value,
                                GString             *string)
 {
   GEnumClass *enum_class;
   GEnumValue *enum_value;
   GtkCssBackgroundRepeat repeat;
 
-  repeat = g_value_get_enum (value);
+  repeat = _gtk_css_value_get_enum (value);
   enum_class = g_type_class_ref (GTK_TYPE_CSS_BACKGROUND_REPEAT);
   enum_value = g_enum_get_value (enum_class, repeat);
 
@@ -649,10 +649,10 @@ background_size_parse (GtkCssStyleProperty *property,
 
 static void
 background_size_print (GtkCssStyleProperty *property,
-                       const GValue        *value,
+                       const GtkCssValue   *value,
                        GString             *string)
 {
-  GtkCssBackgroundSize *size = g_value_get_boxed (value);
+  const GtkCssBackgroundSize *size = _gtk_css_value_get_background_size (value);
 
   if (size->cover)
     g_string_append (string, "cover");
@@ -792,10 +792,10 @@ background_position_parse (GtkCssStyleProperty *property,
 
 static void
 background_position_print (GtkCssStyleProperty *property,
-                          const GValue        *value,
+                          const GtkCssValue   *value,
                           GString             *string)
 {
-  GtkCssBackgroundPosition *pos = g_value_get_boxed (value);
+  const GtkCssBackgroundPosition *pos = _gtk_css_value_get_background_position (value);
   static const GtkCssNumber center = GTK_CSS_NUMBER_INIT (50, GTK_CSS_PERCENT);
   static const struct {
     const char *x_name;
index 21c57b9e654d13a307dc9361df3d324e7a9bd783..391f418fd365222a0a9508c4dc81ed514dda41b3 100644 (file)
@@ -39,7 +39,7 @@ typedef gboolean         (* GtkCssStylePropertyParseFunc)  (GtkCssStyleProperty
                                                             GtkCssParser           *parser,
                                                             GFile                  *base);
 typedef void             (* GtkCssStylePropertyPrintFunc)  (GtkCssStyleProperty    *property,
-                                                            const GValue           *value,
+                                                            const GtkCssValue      *value,
                                                             GString                *string);
 typedef GtkCssValue  *   (* GtkCssStylePropertyComputeFunc)(GtkCssStyleProperty    *property,
                                                             GtkStyleContext        *context,
index abd7dc9d11c2c2c42632ea0541131c99a98f0ce0..8030cd475f7cc44408d8eaa231880ccc1708f84e 100644 (file)
@@ -18,6 +18,7 @@
 #include "config.h"
 
 #include "gtkcssvalueprivate.h"
+#include "gtkcssstylefuncsprivate.h"
 #include "gtktypebuiltins.h"
 #include "gtkgradient.h"
 #include <cairo-gobject.h>
@@ -25,7 +26,6 @@
 
 #include "fallback-c89.c"
 
-typedef struct _GtkCssValue GtkCssValue;
 struct _GtkCssValue
 {
   GTK_CSS_VALUE_BASE
@@ -79,8 +79,20 @@ gtk_css_value_default_free (GtkCssValue *value)
   g_slice_free (GtkCssValue, value);
 }
 
+static void
+gtk_css_value_default_print (const GtkCssValue *value,
+                             GString           *string)
+{
+  GValue g_value = G_VALUE_INIT;
+
+  _gtk_css_value_init_gvalue (value, &g_value);
+  _gtk_css_style_print_value (&g_value, string);
+  g_value_unset (&g_value);
+}
+
 static const GtkCssValueClass GTK_CSS_VALUE_DEFAULT = {
-  gtk_css_value_default_free
+  gtk_css_value_default_free,
+  gtk_css_value_default_print
 };
 
 G_DEFINE_BOXED_TYPE (GtkCssValue, _gtk_css_value, _gtk_css_value_ref, _gtk_css_value_unref)
@@ -447,21 +459,31 @@ _gtk_css_value_unref (GtkCssValue *value)
   value->class->free (value);
 }
 
+void
+_gtk_css_value_print (const GtkCssValue *value,
+                      GString           *string)
+{
+  g_return_if_fail (value != NULL);
+  g_return_if_fail (string != NULL);
+
+  value->class->print (value, string);
+}
+
 GType
-_gtk_css_value_get_content_type (GtkCssValue *value)
+_gtk_css_value_get_content_type (const GtkCssValue *value)
 {
   return value->type;
 }
 
 gboolean
-_gtk_css_value_holds (GtkCssValue *value, GType type)
+_gtk_css_value_holds (const GtkCssValue *value, GType type)
 {
   return g_type_is_a (value->type, type);
 }
 
 static void
-fill_gvalue (GtkCssValue *value,
-            GValue      *g_value)
+fill_gvalue (const GtkCssValue *value,
+            GValue            *g_value)
 {
   GType type;
 
@@ -492,8 +514,8 @@ fill_gvalue (GtkCssValue *value,
 }
 
 void
-_gtk_css_value_init_gvalue (GtkCssValue *value,
-                           GValue      *g_value)
+_gtk_css_value_init_gvalue (const GtkCssValue *value,
+                           GValue            *g_value)
 {
   if (value != NULL)
     {
@@ -503,55 +525,62 @@ _gtk_css_value_init_gvalue (GtkCssValue *value,
 }
 
 gboolean
-_gtk_css_value_is_special  (GtkCssValue *value)
+_gtk_css_value_is_special (const GtkCssValue *value)
 {
   return _gtk_css_value_holds (value, GTK_TYPE_CSS_SPECIAL_VALUE);
 }
 
 GtkCssSpecialValue
-_gtk_css_value_get_special_kind  (GtkCssValue *value)
+_gtk_css_value_get_special_kind (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, GTK_TYPE_CSS_SPECIAL_VALUE), 0);
   return value->u.gint;
 }
 
 const GtkCssNumber *
-_gtk_css_value_get_number  (GtkCssValue *value)
+_gtk_css_value_get_number (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, GTK_TYPE_CSS_NUMBER), NULL);
   return value->u.ptr;
 }
 
 GtkSymbolicColor *
-_gtk_css_value_get_symbolic_color  (GtkCssValue *value)
+_gtk_css_value_get_symbolic_color (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, GTK_TYPE_SYMBOLIC_COLOR), NULL);
   return value->u.ptr;
 }
 
 int
-_gtk_css_value_get_int (GtkCssValue *value)
+_gtk_css_value_get_int (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, G_TYPE_INT), 0);
   return value->u.gint;
 }
 
+int
+_gtk_css_value_get_enum (const GtkCssValue *value)
+{
+  g_return_val_if_fail (_gtk_css_value_holds (value, G_TYPE_ENUM), 0);
+  return value->u.gint;
+}
+
 double
-_gtk_css_value_get_double (GtkCssValue *value)
+_gtk_css_value_get_double (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, G_TYPE_DOUBLE), 0);
   return value->u.dbl;
 }
 
 const char *
-_gtk_css_value_get_string (GtkCssValue *value)
+_gtk_css_value_get_string (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, G_TYPE_STRING), 0);
   return value->u.ptr;
 }
 
 gpointer
-_gtk_css_value_dup_object (GtkCssValue *value)
+_gtk_css_value_dup_object (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, G_TYPE_OBJECT), NULL);
   if (value->u.ptr)
@@ -560,119 +589,119 @@ _gtk_css_value_dup_object (GtkCssValue *value)
 }
 
 gpointer
-_gtk_css_value_get_object (GtkCssValue *value)
+_gtk_css_value_get_object (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, G_TYPE_OBJECT), NULL);
   return value->u.ptr;
 }
 
 gpointer
-_gtk_css_value_get_boxed (GtkCssValue *value)
+_gtk_css_value_get_boxed (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, G_TYPE_BOXED), NULL);
   return value->u.ptr;
 }
 
 const char **
-_gtk_css_value_get_strv (GtkCssValue *value)
+_gtk_css_value_get_strv (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, G_TYPE_STRV), NULL);
   return value->u.ptr;
 }
 
 GtkCssImage *
-_gtk_css_value_get_image (GtkCssValue *value)
+_gtk_css_value_get_image (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, GTK_TYPE_CSS_IMAGE), NULL);
   return value->u.ptr;
 }
 
 GtkBorderStyle
-_gtk_css_value_get_border_style (GtkCssValue *value)
+_gtk_css_value_get_border_style (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, GTK_TYPE_BORDER_STYLE), 0);
   return value->u.gint;
 }
 
 const GtkCssBackgroundSize *
-_gtk_css_value_get_background_size (GtkCssValue *value)
+_gtk_css_value_get_background_size (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, GTK_TYPE_CSS_BACKGROUND_SIZE), NULL);
   return value->u.ptr;
 }
 
 const GtkCssBackgroundPosition *
-_gtk_css_value_get_background_position (GtkCssValue *value)
+_gtk_css_value_get_background_position (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, GTK_TYPE_CSS_BACKGROUND_POSITION), NULL);
   return value->u.ptr;
 }
 
 const GtkCssBorderImageRepeat *
-_gtk_css_value_get_border_image_repeat (GtkCssValue *value)
+_gtk_css_value_get_border_image_repeat (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, GTK_TYPE_CSS_BORDER_IMAGE_REPEAT), NULL);
   return value->u.ptr;
 }
 
 const GtkCssBorderCornerRadius *
-_gtk_css_value_get_border_corner_radius (GtkCssValue *value)
+_gtk_css_value_get_border_corner_radius (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, GTK_TYPE_CSS_BORDER_CORNER_RADIUS), NULL);
   return value->u.ptr;
 }
 
 PangoFontDescription *
-_gtk_css_value_get_font_description (GtkCssValue *value)
+_gtk_css_value_get_font_description (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, PANGO_TYPE_FONT_DESCRIPTION), 0);
   return value->u.ptr;
 }
 
 PangoStyle
-_gtk_css_value_get_pango_style (GtkCssValue *value)
+_gtk_css_value_get_pango_style (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, PANGO_TYPE_STYLE), 0);
   return value->u.gint;
 }
 
 PangoVariant
-_gtk_css_value_get_pango_variant (GtkCssValue *value)
+_gtk_css_value_get_pango_variant (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, PANGO_TYPE_VARIANT), 0);
   return value->u.gint;
 }
 
 PangoWeight
-_gtk_css_value_get_pango_weight (GtkCssValue *value)
+_gtk_css_value_get_pango_weight (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, PANGO_TYPE_WEIGHT), 0);
   return value->u.gint;
 }
 
 const GdkRGBA *
-_gtk_css_value_get_rgba (GtkCssValue *value)
+_gtk_css_value_get_rgba (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, GDK_TYPE_RGBA), NULL);
   return value->u.ptr;
 }
 
 cairo_pattern_t *
-_gtk_css_value_get_pattern (GtkCssValue *value)
+_gtk_css_value_get_pattern (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, CAIRO_GOBJECT_TYPE_PATTERN), NULL);
   return value->u.ptr;
 }
 
 GtkGradient *
-_gtk_css_value_get_gradient (GtkCssValue *value)
+_gtk_css_value_get_gradient (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, GTK_TYPE_GRADIENT), NULL);
   return value->u.ptr;
 }
 
 GtkShadow *
-_gtk_css_value_get_shadow (GtkCssValue *value)
+_gtk_css_value_get_shadow (const GtkCssValue *value)
 {
   g_return_val_if_fail (_gtk_css_value_holds (value, GTK_TYPE_SHADOW), NULL);
   return value->u.ptr;
index 7fcb06661b6f863696b3c91f83713d9222ef2bc6..b87dc576ad827902c033ea755689acf8643a3ec2 100644 (file)
@@ -38,7 +38,6 @@ G_BEGIN_DECLS
 /* A GtkCssValue is a refcounted immutable value type */
 
 typedef struct _GtkCssValue           GtkCssValue;
-typedef struct _GtkCssValueBase       GtkCssValueBase;
 typedef struct _GtkCssValueClass      GtkCssValueClass;
 
 /* using define instead of struct here so compilers get the packing right */
@@ -48,6 +47,9 @@ typedef struct _GtkCssValueClass      GtkCssValueClass;
 
 struct _GtkCssValueClass {
   void          (* free)                              (GtkCssValue                *value);
+
+  void          (* print)                             (const GtkCssValue          *value,
+                                                       GString                    *string);
 };
 
 GType        _gtk_css_value_get_type                  (void) G_GNUC_CONST;
@@ -59,8 +61,11 @@ GtkCssValue *_gtk_css_value_alloc                     (const GtkCssValueClass
 GtkCssValue *_gtk_css_value_ref                       (GtkCssValue                *value);
 void         _gtk_css_value_unref                     (GtkCssValue                *value);
 
-GType        _gtk_css_value_get_content_type          (GtkCssValue                *value);
-gboolean     _gtk_css_value_holds                     (GtkCssValue                *value,
+void         _gtk_css_value_print                     (const GtkCssValue          *value,
+                                                       GString                    *string);
+
+GType        _gtk_css_value_get_content_type          (const GtkCssValue          *value);
+gboolean     _gtk_css_value_holds                     (const GtkCssValue          *value,
                                                       GType                       type);
 GtkCssValue *_gtk_css_value_new_from_gvalue           (const GValue               *g_value);
 GtkCssValue *_gtk_css_value_new_take_gvalue           (GValue                     *g_value);
@@ -78,34 +83,35 @@ GtkCssValue *_gtk_css_value_new_take_image            (GtkCssImage
 GtkCssValue *_gtk_css_value_new_from_number           (const GtkCssNumber         *v);
 GtkCssValue *_gtk_css_value_new_from_background_size  (const GtkCssBackgroundSize *v);
 GtkCssValue *_gtk_css_value_new_from_background_position (const GtkCssBackgroundPosition *v);
-void         _gtk_css_value_init_gvalue               (GtkCssValue                *value,
+void         _gtk_css_value_init_gvalue               (const GtkCssValue          *value,
                                                       GValue                     *g_value);
 
-gboolean                        _gtk_css_value_is_special                 (GtkCssValue *value);
-GtkCssSpecialValue              _gtk_css_value_get_special_kind           (GtkCssValue *value);
-int                             _gtk_css_value_get_int                    (GtkCssValue *value);
-double                          _gtk_css_value_get_double                 (GtkCssValue *value);
-const char *                    _gtk_css_value_get_string                 (GtkCssValue *value);
-gpointer                        _gtk_css_value_dup_object                 (GtkCssValue *value);
-gpointer                        _gtk_css_value_get_object                 (GtkCssValue *value);
-gpointer                        _gtk_css_value_get_boxed                  (GtkCssValue *value);
-const char **                   _gtk_css_value_get_strv                   (GtkCssValue *value);
-const GtkCssNumber             *_gtk_css_value_get_number                 (GtkCssValue *value);
-GtkSymbolicColor               *_gtk_css_value_get_symbolic_color         (GtkCssValue *value);
-GtkCssImage                    *_gtk_css_value_get_image                  (GtkCssValue *value);
-GtkBorderStyle                  _gtk_css_value_get_border_style           (GtkCssValue *value);
-const GtkCssBackgroundSize     *_gtk_css_value_get_background_size        (GtkCssValue *value);
-const GtkCssBackgroundPosition *_gtk_css_value_get_background_position    (GtkCssValue *value);
-const GtkCssBorderCornerRadius *_gtk_css_value_get_border_corner_radius   (GtkCssValue *value);
-const GtkCssBorderImageRepeat  *_gtk_css_value_get_border_image_repeat    (GtkCssValue *value);
-PangoFontDescription *          _gtk_css_value_get_font_description       (GtkCssValue *value);
-PangoStyle                      _gtk_css_value_get_pango_style            (GtkCssValue *value);
-PangoVariant                    _gtk_css_value_get_pango_variant          (GtkCssValue *value);
-PangoWeight                     _gtk_css_value_get_pango_weight           (GtkCssValue *value);
-const GdkRGBA                  *_gtk_css_value_get_rgba                   (GtkCssValue *value);
-cairo_pattern_t                *_gtk_css_value_get_pattern                (GtkCssValue *value);
-GtkGradient                    *_gtk_css_value_get_gradient               (GtkCssValue *value);
-GtkShadow                      *_gtk_css_value_get_shadow                 (GtkCssValue *value);
+gboolean                        _gtk_css_value_is_special                 (const GtkCssValue *value);
+GtkCssSpecialValue              _gtk_css_value_get_special_kind           (const GtkCssValue *value);
+int                             _gtk_css_value_get_int                    (const GtkCssValue *value);
+int                             _gtk_css_value_get_enum                   (const GtkCssValue *value);
+double                          _gtk_css_value_get_double                 (const GtkCssValue *value);
+const char *                    _gtk_css_value_get_string                 (const GtkCssValue *value);
+gpointer                        _gtk_css_value_dup_object                 (const GtkCssValue *value);
+gpointer                        _gtk_css_value_get_object                 (const GtkCssValue *value);
+gpointer                        _gtk_css_value_get_boxed                  (const GtkCssValue *value);
+const char **                   _gtk_css_value_get_strv                   (const GtkCssValue *value);
+const GtkCssNumber             *_gtk_css_value_get_number                 (const GtkCssValue *value);
+GtkSymbolicColor               *_gtk_css_value_get_symbolic_color         (const GtkCssValue *value);
+GtkCssImage                    *_gtk_css_value_get_image                  (const GtkCssValue *value);
+GtkBorderStyle                  _gtk_css_value_get_border_style           (const GtkCssValue *value);
+const GtkCssBackgroundSize     *_gtk_css_value_get_background_size        (const GtkCssValue *value);
+const GtkCssBackgroundPosition *_gtk_css_value_get_background_position    (const GtkCssValue *value);
+const GtkCssBorderCornerRadius *_gtk_css_value_get_border_corner_radius   (const GtkCssValue *value);
+const GtkCssBorderImageRepeat  *_gtk_css_value_get_border_image_repeat    (const GtkCssValue *value);
+PangoFontDescription *          _gtk_css_value_get_font_description       (const GtkCssValue *value);
+PangoStyle                      _gtk_css_value_get_pango_style            (const GtkCssValue *value);
+PangoVariant                    _gtk_css_value_get_pango_variant          (const GtkCssValue *value);
+PangoWeight                     _gtk_css_value_get_pango_weight           (const GtkCssValue *value);
+const GdkRGBA                  *_gtk_css_value_get_rgba                   (const GtkCssValue *value);
+cairo_pattern_t                *_gtk_css_value_get_pattern                (const GtkCssValue *value);
+GtkGradient                    *_gtk_css_value_get_gradient               (const GtkCssValue *value);
+GtkShadow                      *_gtk_css_value_get_shadow                 (const GtkCssValue *value);
 
 G_END_DECLS